import sys

from PyQt6.QtCore import Qt, QSize
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QHBoxLayout, QPushButton, QVBoxLayout, QLayout, \
    QFileDialog
from PyQt6.QtGui import QIcon, QFont, QPalette, QKeySequence

# ========== 系统操作 ==========
app = QApplication(sys.argv)

# 获取系统的样式提示
style_hints = app.styleHints()
# 检查明暗模式设置
if style_hints.colorScheme() is not None:
    if style_hints.colorScheme() == Qt.ColorScheme.Dark:
        print("系统处于暗模式")
    else:
        print("系统处于明亮模式")
else:
    print("系统未设置明暗模式")

# ========== 窗口对象 ==========
window = QWidget()
# 窗口标题
window.setWindowTitle("我的工具箱")
# 窗口图标
window.setWindowIcon(QIcon('./baire slogin.png'))
# 重置大小 - 允许用户调整
window.resize(500, 500)
# 重置窗口大小 - 不允许用户调整
window.setFixedSize()
# 窗口位置
# 从左上角开始算
window.move(400, 400)
# 透明度
# 范围是从0.0（完全透明）到1.0（完全不透明）
window.setWindowOpacity(0.5)
# 窗口状态
window.setWindowState(Qt.WindowState.WindowActive)
# 设置窗口预设
window.setWindowFlags(Qt.WindowType.MacWindowToolBarButtonHint)
# 设置窗口样式
window.setStyleSheet("background-color:green")
# 设置页边距
window.setContentsMargins(20, 20, 20, 20)
# 布局管理器
QGridLayout = QGridLayout()
window.setLayout(QGridLayout)
# 设置背景色
window.setBackgroundRole(QPalette.ColorRole())
# 设置画布
palette = QPalette()
window.setPalette(palette)
# 设置窗体自动填充背景
window.setAutoFillBackground(True)
# 窗口关闭
window.close()
# 设置遮罩
window.setMask()

# 窗口的显示方法
window.show()

# Qt 提供了很多种窗口类型，
# QWidget 是最简单的一种，支持用户自定义的窗口
# QMainWindow 是主窗口模式，这个窗口自带布局，用户能够操作的布局很局限
# QMainWindow 包含 菜单栏、工具栏、状态栏、中央部件区域


# ========== 文本框对象 ==========
label = QLabel()
# 父类信息，如果不定义，会自己新建一个窗口承载
label.setParent(window)
label.setText("我是一个窗口")
label.setWindowTitle("这个是文本框的 Title")
label.setNum(5)
label.setAlignment(Qt.AlignmentFlag.AlignRight)

# ========== 空间布局对象 ==========
# 布局用于处理窗口内部元素的排列顺序
# QHBoxLayout：水平布局，QVBoxLayout：垂直布局
hLay = QHBoxLayout()
vLay = QVBoxLayout()

# 添加子控件到布局中，可以设定它的拉伸、对齐方式
# 拉伸参数默认是 0，自动分配空间，系数代表的空间占比，越大占用空间越大
hLay.addWidget(QPushButton("按钮"), 1, Qt.AlignmentFlag.AlignCenter)
# 设置子空间外边距
hLay.setContentsMargins(0, 0, 0, 0)
# 子控件之间的间距
hLay.setSpacing(0)
# 子控件的对齐方式 Qt.AlignmentFlag 枚举值
hLay.setAlignment(Qt.AlignmentFlag.AlignCenter)
# 添加其他布局空间
hLay.addLayout(QHBoxLayout())
# 设置大小约束
hLay.setSizeConstraint(QLayout.SizeConstraint.SetFixedSize)

# QGridLayout：网格布局
# 网格布局允许像网格一样处理页面布局，参数调用也会额外提供一些位置参数
gLay = QGridLayout
# 参数：行，列，eg: 第一行，第二个位置
gLay.addWidget(QPushButton("按钮"), 1, 2, Qt.AlignmentFlag.AlignHCenter)

# ========== 按钮对象 ==========
# 命令按钮
push = QPushButton()
push.setText("按钮的名称")
push.setStyleSheet("background-color:green")
# 外边距
push.setContentsMargins(1, 1, 1, 1)
#
push.setChecked(True)
# 按钮图标
push.setIcon(QIcon('./baire slogin.png'))
# 按钮图标大小 宽*高
push.setIconSize(QSize(1, 2))
# 设置默认状态
push.setDefault(True)
# 按钮是否可用
push.setEnabled(True)
# 设置快捷键
push.setShortcut(QKeySequence("shift", "d"))
# 状态转换
push.toggle()
# 点击事件触发器
push.click.connect(function)

# ========== 文件操作对象 ==========
file_dialog = QFileDialog()
# 获取文件的 url 地址
file_dialog.getOpenFileUrl()
file_dialog.getOpenFileUrls()
# 获取文件的地址信息
file_dialog.getOpenFileName()
file_dialog.getOpenFileNames()
# 获取文件夹的地址信息
file_dialog.getExistingDirectory()
file_dialog.getExistingDirectoryUrl()
# 保存文件窗口
file_dialog.getSaveFileName()
file_dialog.getSaveFileUrl()
# 窗口的操作模式，QFileDialog.AcceptMode 类型
file_dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptOpen)
#
file_dialog.setLabelText(QFileDialog.DialogLabel.Accept, '确认')
# 设置文件的默认后缀
file_dialog.setDefaultSuffix("PNG")
# 文件选择模式 QFileDialog.FileMode.AnyFile 枚举，可以指定用户可选择的文件类型
file_dialog.setFileMode(QFileDialog.FileMode.AnyFile)
# 设置默认的窗口打开位置,支持：地址、QDir
file_dialog.setDirectory('')
# 设置名称过滤器，多个类型的过滤器之间用两个分号分割（例如:所有文件(.);Python文件(.py))﹔而一个过滤器中如果有多种格式，可以用空格分割(例如:图片文件(.jpg .png.bmp))
file_dialog.setNameFilter('')
# 设置文件展示模式，列表、详情
file_dialog.setViewMode(QFileDialog.ViewMode.Detail)
